/**
 * 位运算
 * @param {number} n
 * @return {boolean}
 */
export var hasAlternatingBits = function (n) {
  // 右移一位，与自身异或, 此时如果为true的数，则a二进制应全为1
  const a = n ^ (n >> 1)
  // 如何判断a是否全为1？ a + 1 后再运行 "与" 运算，结果应为0
  return ((a + 1) & a) === 0
}

/**
 * 正则表达式
 * @param {number} n
 * @return {boolean}
 */
export var hasAlternatingBits2 = function (n) {
  return /^0?(10)*1?$/.test(n.toString(2))
}
